#include "server_BombaPlanta.h"
#include "server_Coordenada.h"
#include "server_IOcupante.h"
#include "server_Mapa.h"
#include "server_Aliado.h"
#include "server_Enemigo.h"
#include <iostream>

using std::cout;
using std::endl;

BombaPlanta::BombaPlanta(){
}

BombaPlanta::BombaPlanta(int vel, Coordenada pos, string dir, int alcance) {
    this->direccion = dir;
    this->alcance = alcance;
    this->posicion = pos;
    this->velocidad = vel;
    this->exploto = false;
    this->codigo = string("9");
}

BombaPlanta::~BombaPlanta(){
}

void BombaPlanta::soltarEn(Coordenada coord){
	posicion = coord;
}

void BombaPlanta::mover(Coordenada nueva_coord){
	posicion = nueva_coord;	
}

void BombaPlanta::mover(){
    posicionAnterior = posicion;
    if      (direccion == "arriba")     posicion.incrementarY();
    else if (direccion == "abajo")      posicion.decrementarY();
    else if (direccion == "derecha")    posicion.incrementarX();
    else if (direccion == "izquierda")  posicion.decrementarX();
}


void BombaPlanta::colisionarCon(IOcupante* ocupante) {
    ocupante->colisionarConBombaPlanta();    
}

void BombaPlanta::actuar(Mapa& mapa) {    
    this->mover();
    mapa.sacarElemento(this, posicionAnterior);

    if (mapa.fueraDeRango(this->posicion)) {
        this->retroceder();
        mapa.ubicarElemento(this, posicion);
        this->explotar(mapa);
        return;
    }
    //mapa.ubicarElemento(this, posicion);
    if (mapa.posicionBloqueada(this->posicion)) {
        this->retroceder();
        //mapa.sacarElemento(this, posicionAnterior);
        mapa.ubicarElemento(this, posicion);
        this->explotar(mapa);
        return;
    }
    mapa.ubicarElemento(this, posicion);
    if (mapa.hayColision(this->posicion)) {
        this->explotar(mapa);
    }
    //Aca deberia explotar solamente si colisiona con
    // zombies pero por ahora lo dejo asi (colisiona 
    // con todo).
}

void BombaPlanta::retroceder() {
    posicion = posicionAnterior;
   
}

Coordenada BombaPlanta::getPosicion() {
    return posicion;
}
